#include "ScnsXpt2046.c.h"

#if defined(SCNS_XPT2046_ENABLE)&&SCNS_XPT2046_ENABLE==1

const ScnsBspXpt2046Config scnsBspXpt2046Config[SCNS_XPT2046_MAX]={
    {.ch=2,.xa=-8.521866e+00,.xb=6.299405e-02,.ya=-1.700484e+01,.yb=8.850733e-02,},
};

#define PTX_SCL     B13
#define PTX_MOSI    B15
#define PTX_MISO    B14
#define PTX_CS      B7
#define PTX_PEN     B6

#define LCD_SCL     SPI2_SCK_B13
#define LCD_MOSI    SPI2_MOSI_B15

ScnsStatus scnsBspXpt2046Init(ScnsXpt2046Enum xptN)
{
    //spi_init(PTX_SPI,SPI_MODE2,system_clock/30,PTX_SCL,PTX_MOSI,PTX_MISO,PTX_CS);
    gpio_init(PTX_CS,GPO,1,GPO_PUSH_PULL);
    gpio_init(PTX_MISO,GPI,0,GPI_FLOATING_IN);
    gpio_init(PTX_PEN,GPI,0,GPI_FLOATING_IN);
    
    return SCNS_STATUS_OK;
}

ScnsStatus scnsBspXpt2046PostInit(ScnsXpt2046Enum xptN)
{
    
    return SCNS_STATUS_OK;
}

void scnsBspXpt2046Begin(ScnsXpt2046Enum xptN)
{
    gpio_dir(PTX_MOSI,GPO,GPO_PUSH_PULL);
    gpio_dir(PTX_SCL,GPO,GPO_PUSH_PULL);
    //gpio_dir(PTX_MISO,GPI,GPI_FLOATING_IN);
    //gpio_dir(PTX_CS,GPO,GPO_PUSH_PULL);
}

void scnsBspXpt2046End(ScnsXpt2046Enum xptN)
{
    afio_init((gpio_pin_enum)(LCD_SCL&0xFF),GPO,(gpio_af_enum)((LCD_SCL&0xF00)>>8),GPO_AF_PUSH_PULL);
    afio_init((gpio_pin_enum)(LCD_MOSI&0xFF),GPO,(gpio_af_enum)((LCD_MOSI&0xF00)>>8),GPO_AF_PUSH_PULL);
}

void scnsBspXpt2046SetMosi(ScnsXpt2046Enum xptN,uint8 mosi)
{
    gpio_set_level(PTX_MOSI,mosi);
}

uint8 scnsBspXpt2046GetMiso(ScnsXpt2046Enum xptN)
{
    return gpio_get_level(PTX_MISO);
}

void scnsBspXpt2046SetScl(ScnsXpt2046Enum xptN,uint8 scl)
{
    gpio_set_level(PTX_SCL,scl);
}

void scnsBspXpt2046SetCs(ScnsXpt2046Enum xptN,uint8 cs)
{
    gpio_set_level(PTX_CS,cs);
}

uint8 scnsBspXpt2046GetPen(ScnsXpt2046Enum xptN)
{
    return gpio_get_level(PTX_PEN);
}

#endif
